home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / fhdebug.c < prev    next >
C/C++ Source or Header  |  1992-06-11  |  2KB  |  104 lines

  1. #include <alloc.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <stdarg.h>
  5. /*
  6.  
  7.  Use enviroment variable DEBUG.
  8.  f.e.
  9.  set debug=PRN
  10.  
  11.  
  12. */
  13.  
  14.  
  15.  
  16. /*
  17.    all theese functions are in _FARHEAP.ASM
  18. */
  19. void _free(void  * block);
  20. void _farfree(void far *block);
  21. void *_malloc(size_t size);
  22. void far *_farmalloc(unsigned long nbytes);
  23. void *_realloc(void *block, size_t size);
  24. void far *_farrealloc(void far *oldblock, unsigned long nbytes);
  25.  
  26.  
  27.  
  28. static int registered=0;
  29. static doprint=0;
  30. static FILE * out=0;
  31. static char outputerrormsg[]="\n Error writing debug file\n";
  32.  
  33. static void closefile(void)
  34.   {
  35.     if(out){doprint=0;fclose(out);}
  36.  }
  37. static void openfile(void)
  38.    {
  39. char * debug_name;
  40.     debug_name=getenv("DEBUG");
  41.     if( (debug_name==0) || (*debug_name=='\0') ) return;
  42.     out=fopen(debug_name,"wt");
  43.     registered=1;
  44.     if(out) doprint=1;
  45.   }
  46. #pragma startup openfile 70
  47. #pragma exit closefile 70
  48.  
  49.  
  50.  
  51.   void dprintf(const char * format,...)
  52.    { va_list ap;
  53.      if(!doprint) return;
  54.      va_start(ap,format);
  55.      vfprintf(out,format,ap);
  56.      fflush(out);
  57.      if(ferror(out)) {fprintf(stderr,outputerrormsg);abort();}
  58.      va_end(ap);
  59.    }
  60.  
  61.  
  62. /*
  63.  theese functions can be used for debug purposes !
  64. */
  65.  
  66. static char debugging_memory_management[]=
  67.       "debugging C memory management:";
  68.  
  69. void free(void  * block)
  70.  { _free(block);
  71.    dprintf("%s       free %p\n",debugging_memory_management,block);
  72.   }
  73.  
  74. void farfree(void far *block)
  75.    {_farfree(block);
  76.    dprintf("%s    farfree %Fp\n",debugging_memory_management,block);
  77.     }
  78.  
  79. void *malloc(size_t size)
  80.    {void * result= _malloc(size);
  81.     dprintf("%s     malloc %p for %u bytes\n",
  82.      debugging_memory_management,result,size);
  83.     return result;}
  84.  
  85. void far *farmalloc(unsigned long nbytes)
  86.    {void far * result= _farmalloc(nbytes);
  87.     dprintf("%s  farmalloc %Fp for %lu bytes\n",
  88.      debugging_memory_management,result,nbytes);
  89.     return result;
  90.    }
  91.  
  92. void *realloc(void *block, size_t size)
  93.    { void * result=_realloc(block,size);
  94.     dprintf("%s    realloc %p to %p for %u bytes\n",
  95.         debugging_memory_management,block,result,size);
  96.     return result; }
  97.  
  98. void far *farrealloc(void far *oldblock, unsigned long nbytes)
  99.    { void far * result=_farrealloc(oldblock,nbytes);
  100.     dprintf("%s farrealloc %Fp to %Fp for %lu bytes\n",
  101.         debugging_memory_management,oldblock,result,nbytes);
  102.     return result; }
  103.  
  104.